Загрузка уже выбранных значений в Select2 из базы данных

Чтобы в Select2 загрузить уже выбранные значения из базы данных, нужно передать массив значений, которые были сохранены в базе данных, в поле модели. Вот как это можно сделать:


1. Подготовка данных в контроллере

В контроллере получите список всех возможных участников ($participantList) и уже выбранных участников ($model->participants). Пример:

php

use yii\helpers\ArrayHelper;
use app\models\Participant;

// Получаем список всех участников
$participantList = ArrayHelper::map(Participant::find()->all(), 'id', 'name');

// Получаем уже выбранные значения из базы данных
$model->participants = [1, 2, 3]; // Пример: массив ID выбранных участников


2. Использование в виджете Select2

Передайте данные в виджет Select2 в представлении. Убедитесь, что поле модели ($model->participants) содержит массив ID уже выбранных значений. Пример:

php

use kartik\select2\Select2;

echo $form->field($model, 'participants')->widget(Select2::class, [
    'data' => $participantList, // Список всех участников
    'options' => [
        'placeholder' => 'Выберите участников...',
        'multiple' => true, // Разрешаем множественный выбор
    ],
    'pluginOptions' => [
        'allowClear' => true, // Кнопка очистки
    ],
]);


3. Сохранение данных

При сохранении данных в базу убедитесь, что поле participants обрабатывается как массив. Например, если вы используете ActiveRecord, можно сериализовать массив или сохранить его в связанной таблице. Пример сохранения в связанной таблице:

php

if ($model->load(Yii::$app->request->post()) && $model->save()) {
    // Удаляем старые связи
    ParticipantAssignment::deleteAll(['model_id' => $model->id]);

    // Сохраняем новые связи
    foreach ($model->participants as $participantId) {
        $assignment = new ParticipantAssignment();
        $assignment->model_id = $model->id;
        $assignment->participant_id = $participantId;
        $assignment->save();
    }
}


4. Загрузка данных при редактировании

Когда вы редактируете запись, просто загрузите уже сохраненные значения в поле модели ($model->participants), как показано в шаге 1. Select2 автоматически отобразит их как выбранные.